package com.company.AtomicOption;

import java.util.concurrent.TimeUnit;

/**
 * 作者  Administrator
 * 时间  2017/6/5 10:11
 * 文件  ThreadPoolsDemo
 * 描述
 */
public class VolatileDemo {
	int x = 0 ;
	//注意：这里的b没有被volatile修饰
	boolean b = false;
	/**
	 * 写操作
	 */
	private void write(){
		x = 5;
		b = true;
	}
	/**
	 * 读操作
	 */
	private void read(){
		//如果b=false的话，就会无限循环，直到b=true才会执行结束，会打印出x的值
		while(!b){
		}
		System.out.println("x="+x);
	}
	public static void main(String[] args) throws Exception {
		final VolatileDemo volatileDemo = new VolatileDemo();
		//线程1执行写操作
		Thread thread1 = new Thread(new Runnable() {

			@Override
			public void run() {
				volatileDemo.write();
			}
		});
		//线程2执行读操作
		Thread thread2 = new Thread(new Runnable() {

			@Override
			public void run() {
				volatileDemo.read();
			}
		});
		//我们让线程2的读操作先执行
		thread2.start();
		//睡1毫秒，为了保证线程2比线程1先执行
		TimeUnit.MILLISECONDS.sleep(1);
		//再让线程1的写操作执行
		thread1.start();
		thread1.join();
		thread2.join();
		//等待线程1和线程2全部结束后，打印执行结束
		System.out.println("执行结束");
	}
}
